package com.ziroom.crm.mq.core.persistence;

import com.ziroom.crm.mq.core.MqType;
import com.ziroom.crm.mq.core.data.Message;
import com.ziroom.crm.mq.core.data.ProcessTypes;

import java.util.Date;
import java.util.List;

/**
 * <p></p>
 * <p>
 * <PRE>
 * <BR>    修改记录
 * <BR>-----------------------------------------------
 * <BR>    修改日期         修改人          修改内容
 * </PRE>
 *
 * @author WeiShaoying
 * @version 1.0
 * @date Created in 2020年08月31日 17:38
 * @since 1.0
 */
@SuppressWarnings("ALL")
public interface Persistence<T extends Message> {

    String FILE = "file";

    /**
     * 持久化类型
     *
     * @return
     */
    String getType();

    /**
     * mq类型
     *
     * @return
     */
    MqType getMqType();

    /**
     * 保存消息
     *
     * @param message
     * @param processType 处理了行 @see com.ziroom.crm.mq.core.data.ProcessType
     */
    void save(T message, ProcessTypes processType);

    /**
     * 批量保存消息
     *
     * @param messageList
     */
    void batchSave(List<T> messageList, ProcessTypes processType);

    /**
     * 读取需要发送的消息
     *
     * @param size 指定大小
     * @return
     */
    List<T> queryMessage(int size, ProcessTypes processType, Date queryEndTime);

    /**
     * 查询所有消息
     *
     * @param processType
     * @return
     */
    List<T> queryAllMessage(ProcessTypes... processTypes);

    /**
     * 清空文件
     *
     * @param processTypes
     */
    void clear(ProcessTypes... processTypes);

    /**
     * 读取文件行数
     *
     * @param processTypes
     * @return
     */
    int getDataCount(ProcessTypes... processTypes);

}
